package com.ccovo.controller;

import cn.dev33.satoken.stp.StpUtil;
import com.ccovo.domain.R;
import com.ccovo.domain.constants.Constants;
import com.ccovo.enums.ErrorCode;
import com.ccovo.service.IUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
@Api(tags = "踢人下线接口")
@RequestMapping("/kictout")
public class KickoutController {

    /**
     * 强制注销等价于对方主动调用了注销方法，再次访问会提示：Token无效。
     * 踢人下线不会清除Token信息，而是将其打上特定标记，再次访问会提示：Token已被踢下线。
     */


    /**
     * 强制指定账号注销下线
     */
    @ApiOperation(value = "强制指定账号注销下线")
    @PostMapping("/logout")
    public R<?> logout(Long loginId) {
        StpUtil.logout(loginId);
        return R.ok();
    }

    /**
     * 强制指定账号指定端注销下线
     */
    @ApiOperation(value = "强制指定账号指定端注销下线")
    @PostMapping("/logoutByLoginKey")
    public R<?> logoutByLoginKey(Long loginId, String device) {
        StpUtil.logout(loginId, device);
        return R.ok();
    }

    /**
     * 指定Token注销下线
     */
    @ApiOperation(value = "指定Token注销下线")
    @PostMapping("/logoutByTokenValue")
    public R<?> logoutByTokenValue(String tokenValue) {
        StpUtil.logoutByTokenValue(tokenValue);
        return R.ok();
    }

    /**
     * 指定账号踢下线
     */
    @ApiOperation(value = "指定账号踢下线")
    @PostMapping("/kickout")
    public R<?> kickout(Long loginId) {
        StpUtil.kickout(loginId);
        return R.ok();
    }

    /**
     * 指定账号指定端踢下线
     */
    @ApiOperation(value = "指定账号指定端踢下线")
    @PostMapping("/kickoutByLoginKey")
    public R<?> kickoutByLoginKey(Long loginId, String device) {
        StpUtil.kickout(loginId, device);
        return R.ok();
    }

    /**
     * 指定Token踢下线
     */
    @ApiOperation(value = "指定Token踢下线")
    @PostMapping("/kickoutByTokenValue")
    public R<?> kickoutByTokenValue(String tokenValue) {
        StpUtil.kickoutByTokenValue(tokenValue);
        return R.ok();
    }



}
